﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;

namespace PF.MecSom {
    public partial class Migracao : DevExpress.XtraEditors.XtraForm {
        public Migracao() {
            InitializeComponent();
        }

        private void btnMigrar_Click(object sender, EventArgs e) {
            Db.MecSom sdf = new Db.MecSom();

            // Backup
            string caminhoDb = Path.GetDirectoryName(Application.ExecutablePath) + @"\Db\";
            if (!Directory.Exists(caminhoDb + "Backup"))
                Directory.CreateDirectory(caminhoDb + "Backup");
            File.Copy(caminhoDb + "MecSom.sdf", caminhoDb + @"Backup\MecSom_" + DateTime.Now.ToString("yyyy.MM.dd-HH.mm.ss") + ".sdf");


            // Exclusão
            var chavesSdf = from chave in sdf.Chaves
                            select chave;

            foreach (var chaveSdf in chavesSdf)
                sdf.DeleteObject(chaveSdf);

            sdf.SaveChanges();


            var servicoEquipamentosSdf = from servicoEquipamento in sdf.ServicoEquipamento
                                         select servicoEquipamento;

            foreach (var servicoEquipamentoSdf in servicoEquipamentosSdf)
                sdf.DeleteObject(servicoEquipamentoSdf);

            sdf.SaveChanges();


            var servicosSdf = from servico in sdf.Servico
                              select servico;
            
            foreach (var servicoSdf in servicosSdf)
                sdf.DeleteObject(servicoSdf);

            sdf.SaveChanges();

            
            // Chaves
            chavesTableAdapter.Fill(mecSom.chaves);

            var chaves = from linha in mecSom.chaves.AsEnumerable()
                         select linha;

            foreach (var chave in chaves) {
                Db.Chaves chaveSdf = new Db.Chaves();
                chaveSdf.Chave = chave.chave;
                chaveSdf.UltimoValor = chave.ultimovalor;
                
                sdf.AddToChaves(chaveSdf);
            }

            // Servico / ServicoEquipamentos
            servicoTableAdapter.Fill(mecSom.servico);
            servicoeqpTableAdapter.Fill(mecSom.servicoeqp);

            var servicos = from linha in mecSom.servico.AsEnumerable()
                           orderby linha.cod_ser
                           select linha;

            foreach (var servico in servicos) {
                Db.Servico servicoSdf = new Db.Servico();
                servicoSdf.CodServico = servico.cod_ser;
                servicoSdf.Ativo = (servico.ativo == "S");
                servicoSdf.Data = servico.data;
                servicoSdf.Cliente = servico.cliente;
                servicoSdf.ClienteTelefone1 = servico.clientetel1;
                servicoSdf.ClienteTelefone2 = servico.clientetel2;
                servicoSdf.ClienteTelefone3 = servico.clientetel3;
                servicoSdf.Contato = servico.contato;
                servicoSdf.ContatoTelefone1 = servico.contatotel1;
                servicoSdf.ContatoTelefone2 = servico.contatotel2;
                servicoSdf.ContatoTelefone3 = servico.contatotel3;

                sdf.AddToServico(servicoSdf);

                var servicoEquipamentos = from servicoEquipamento in mecSom.servicoeqp.AsEnumerable()
                                          where servicoEquipamento.cod_ser == servico.cod_ser
                                          select servicoEquipamento;

                foreach (var servicoEquipamento in servicoEquipamentos) {
                    Db.ServicoEquipamento servicoEquipamentoSdf = new Db.ServicoEquipamento();
                    servicoEquipamentoSdf.Servico = servicoSdf;
                    servicoEquipamentoSdf.CodServicoEquipamento = servicoEquipamento.cod_eqp;
                    if (!servicoEquipamento.IsacoesNull()) servicoEquipamentoSdf.Acoes = servicoEquipamento.acoes;
                    if (!servicoEquipamento.IsdefeitoNull()) servicoEquipamentoSdf.Defeito = servicoEquipamento.defeito;
                    if (!servicoEquipamento.IsmarcaNull()) servicoEquipamentoSdf.Marca = servicoEquipamento.marca;
                    if (!servicoEquipamento.IsmodeloNull()) servicoEquipamentoSdf.Modelo = servicoEquipamento.modelo;
                    if (!servicoEquipamento.IsobsNull()) servicoEquipamentoSdf.Observacao = servicoEquipamento.obs;
                    if (!servicoEquipamento.IsorcamentoNull()) servicoEquipamentoSdf.Orcamento = servicoEquipamento.orcamento;
                    if (!servicoEquipamento.IspagoNull()) servicoEquipamentoSdf.Pago = servicoEquipamento.pago;
                    if (!servicoEquipamento.IsestadoNull()) servicoEquipamentoSdf.Situacao = servicoEquipamento.estado;
                    if (!servicoEquipamento.IsestadoaprovadoNull()) servicoEquipamentoSdf.SituacaoAprovado = servicoEquipamento.estadoaprovado;
                    if (!servicoEquipamento.IsestadocanceladoNull()) servicoEquipamentoSdf.SituacaoCancelado = servicoEquipamento.estadocancelado;
                    if (!servicoEquipamento.IsestadoentregueNull()) servicoEquipamentoSdf.SituacaoEntregue = servicoEquipamento.estadoentregue;
                    if (!servicoEquipamento.IsestadoesperandopecasNull()) servicoEquipamentoSdf.SituacaoEsperandoPecas = servicoEquipamento.estadoesperandopecas;
                    if (!servicoEquipamento.IsestadoorcamentoNull()) servicoEquipamentoSdf.SituacaoOrcamento = servicoEquipamento.estadoorcamento;
                    if (!servicoEquipamento.IsestadoprontoNull()) servicoEquipamentoSdf.SituacaoPronto = servicoEquipamento.estadopronto;
                    if (!servicoEquipamento.IstipoNull()) servicoEquipamentoSdf.Tipo = servicoEquipamento.tipo;

                    sdf.AddToServicoEquipamento(servicoEquipamentoSdf);
                }
            }

            sdf.SaveChanges();
        }
    }
}